/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import BancoDeDados.CriaConexao;
import Logica.Sala;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Pedro H
 */
//O DAO (data acess object) é um padrão de acesso à dados, serve para desacoplar a camada de negócio (por exemplo) da camada de persitência.
//divide os comandos sql das classes normais
public class SalaDAO {

    private Connection conexao;

    public SalaDAO() throws SQLException {
        this.conexao = CriaConexao.getConexao();
    }

    public void adiciona(Sala sala) throws SQLException {//adiciona um contato no banco de dados. ele referencia o Contado do pac. logica!

        String sql = "insert into sala (numlugares, predio, andar, tipo, situacao) values(?,?,?,?,?)"; //o "?" indica que a gente naum sabe o que vai ter como valores

        PreparedStatement stmt = conexao.prepareStatement(sql);
        //seta os valores!!
       
        stmt.setInt(1, sala.getNumLugares());
        stmt.setString(2, sala.getPredio());
        stmt.setInt(3, sala.getAndar());
        stmt.setString(4, sala.getTipo());
        stmt.setString(5, sala.getSituacao());

        //executa o codigo sql!
        stmt.execute();
        stmt.close();
    }

    public List<Sala> getLista(int id) throws SQLException {

        String sql = "select *from sala where id like ? "; //seleciona tudo apenas do contato que for igual ao nome passado como parametro
        PreparedStatement stmt = this.conexao.prepareStatement(sql); //prepara a conexao com BD
        stmt.setInt(1, id);
        ResultSet rs = stmt.executeQuery();//executa o que esta encima. ele sempre retorna algo do tipo resultSet...è um ponteiro que anda pela tabela

        List<Sala> minhaLista = new ArrayList<Sala>();

        while (rs.next()) {
            Sala sala = new Sala();
            sala.setId(Integer.parseInt(rs.getString("id"))); //"Long.valueOF" é um parse para o id
            sala.setAndar(rs.getInt("andar"));
            sala.setPredio(rs.getString("predio"));
            sala.setSituacao(rs.getString("situacao"));
            sala.setNumLugares(rs.getInt("numlugares"));
            sala.setTipo(rs.getString("tipo"));
            sala.setSituacao(rs.getString("situacao"));

            minhaLista.add(sala);
        }
        rs.close();
        stmt.close();
        return minhaLista;
    }

    public void altera(Sala sala) throws SQLException{
        //update é o codigo de alteraçao do sql!
        String sql = "update sala set numlugares  = ?,andar = ?, tipo = ?,predio = ?, situacao = ? where id = ? ";
        PreparedStatement stmt = conexao.prepareStatement(sql);

        stmt.setInt(1, sala.getNumLugares());
        stmt.setInt(2, sala.getAndar());
        stmt.setString(3, sala.getTipo());
        stmt.setString(4, sala.getPredio());
        stmt.setString(5, sala.getSituacao());
        stmt.setInt(6, sala.getId());

        //executa o codigo sql!
        stmt.execute();
        stmt.close();
    }

    public void remove(Sala sala) throws SQLException{

        String sql = "delete from sala where id = ?";
        PreparedStatement stmt = conexao.prepareStatement(sql);

        stmt.setInt(1, sala.getId());
        stmt.execute();
        stmt.close();
    }

    public List<Sala> getListaSalas() throws SQLException {

        String sql = "select *from sala "; //seleciona tudo apenas do contato que for igual ao nome passado como parametro
        PreparedStatement stmt = this.conexao.prepareStatement(sql); //prepara a conexao com BD
        //stmt.setString(1, nome);
        ResultSet rs = stmt.executeQuery();//executa o que esta encima. ele sempre retorna algo do tipo resultSet...è um ponteiro que anda pela tabela

        List<Sala> minhaLista = new ArrayList<Sala>();

        while (rs.next()) {
            Sala sala = new Sala();
            sala.setId(Integer.parseInt(rs.getString("id"))); //"Long.valueOF" é um parse para o id
            sala.setAndar(rs.getInt("andar"));
            sala.setPredio(rs.getString("predio"));
            sala.setSituacao(rs.getString("situacao"));
            sala.setNumLugares(rs.getInt("numlugares"));
            sala.setTipo(rs.getString("tipo"));
            sala.setSituacao(rs.getString("situacao"));

            minhaLista.add(sala);
        }
        rs.close();
        stmt.close();
        return minhaLista;
    }
}
